#include "MovimientoEnL.h"

/* Dados un valor de incremento o decremento para X e Y, una pieza y una lista para
 * almacenar los movimientos posibles, explora el tablero y agrega cada movimiento posible a la lista.*/

void MovimientoEnL::explorar(int incOrDecX,
							 int incOrDecY,
							 const Tablero& tablero,
							 const Posicion& posInicial,
							 Lista* movimientos) const {
	Posicion aux = posInicial;
	aux.incOrDecX(incOrDecX);
	aux.incOrDecY(incOrDecY);
	if (aux.estaDentroDeTabla()) {
		if (tablero.casillaNoOcupada(aux))
				movimientos->agregar(aux.intXToChar(), aux.intYToChar());
		else
			if(tablero.piezaContrario(posInicial, aux))
				movimientos->agregar(aux.intXToChar(), aux.intYToChar());
	}
}


/* Retorna una lista con los posibles movimientos en forma de L.*/

Lista* MovimientoEnL::movimientosPosibles(const Tablero& tablero,
										  const Posicion& posInicial) const {
	Lista *movimientos = new Lista();
	explorar(1, -2, tablero, posInicial, movimientos);
	explorar(2, -1, tablero, posInicial, movimientos);
	explorar(2, 1, tablero, posInicial, movimientos);
	explorar(1, 2, tablero, posInicial, movimientos);
	explorar(-1, 2, tablero, posInicial, movimientos);
	explorar(-2, 1, tablero, posInicial, movimientos);
	explorar(-2, -1, tablero, posInicial, movimientos);
	explorar(-1, -2, tablero, posInicial, movimientos);
	return movimientos;
}
